package com.lm.bytebuddy.example;

import net.bytebuddy.ByteBuddy;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.implementation.FixedValue;

import static net.bytebuddy.matcher.ElementMatchers.named;

public class ByteBuddyExample {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException {
        // 使用 ByteBuddy 动态生成一个类
        Class<?> dynamicClass = new ByteBuddy()
                .subclass(Object.class) // 继承自 Object
                .name("com.example.DynamicClass") // 设置类名
                .method(named("toString")) // 覆盖 toString 方法
                .intercept(FixedValue.value("Hello, ByteBuddy!")) // 返回固定值
                .make() // 创建类定义
                .load(ByteBuddyExample.class.getClassLoader()) // 加载到当前类加载器
                .getLoaded();

        // 实例化动态类并调用 toString 方法
        Object instance = dynamicClass.newInstance();
        System.out.println(instance.toString()); // 输出：Hello, ByteBuddy!
    }
}
